import { defineStore } from 'pinia'

export const useStore = defineStore('store', {
  state: () => {
    return {
      // 控制侧边栏显示隐藏
      asideIshow: true,
      // 存储当前选中的菜单
      selectMenu: JSON.parse(localStorage.getItem('menuList')) || [
        {
          id: '1',
          name: '控制台',
          icon: 'Platform',
          path: '/dashboard',
          describe: '用于展示当前系统中的统计数据、统计报表及重要实时数据',
        },
      ],
      // 存储动态路由
      routerList: JSON.parse(localStorage.getItem('routerList')) || [],
      // 存储当前选中的菜单
      menuActive: localStorage.getItem('menuActive') || '1-1',
    }
  },
  actions: {
    // 切换侧边栏显示隐藏
    changeAsideIshow() {
      this.asideIshow = !this.asideIshow
    },
    // 添加菜单
    addMenu(menu) {
      let isexist = this.selectMenu.findIndex((item) => item.path === menu.path)
      if (isexist === -1) {
        this.selectMenu.push(menu)
      }
      localStorage.setItem('menuList', JSON.stringify(this.selectMenu))
    },
    // 删除菜单
    delMenu(menu) {
      // 找到删除菜单的下标
      let index = this.selectMenu.findIndex((item) => item.path === menu.path)
      // 删除指定菜单
      this.selectMenu.splice(index, 1)
      localStorage.setItem('menuList', JSON.stringify(this.selectMenu))
    },
    // 设置动态路由
    dynamicMenu(menu) {
      // 通过 glob 导入文件
      const modules = import.meta.glob('../view/**/**/*.vue')
      function routerSet(router) {
        router.forEach(route => {
          // 判断没有子菜单，拼接路由信息
          if(!route.children) {
            const  url = `../view${route.meta.path}/${route.name}.vue`
            // 拿到获取vue的组件
            route.component = modules[url]
          } else {
            routerSet(route.children)
          }
        })
      }
      routerSet(menu)
      // 拿到完整的路由数据
      this.routerList = menu
      // console.log(routerList)
      // 持久化存储
      localStorage.setItem('routerList', JSON.stringify(menu))
    },
    // 修改侧边栏菜单
    updateMenuActive(prop) {
      this.menuActive = prop
      localStorage.setItem('menuActive', this.menuActive)
    },
    // 清空用户缓存
    clearUserCache() {
      // 清空用户信息
      localStorage.removeItem('userInfo')
      // 清空路由
      localStorage.removeItem('routerList')
      // 清空菜单激活
      localStorage.removeItem('menuActive')
      // 清空 Nav 菜单
      localStorage.removeItem('menuList')
      // 清空token
      localStorage.removeItem('pz_token')
    },
  },
})
